<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script>

//	集合
function Set(){
	var items = [];
	
	//	判断集合中是否存在value值，存在返回true
	this.has = function(value){
		if (items.indexOf(value)==-1){
			return false;
		}else{
			return true;
		}
		// return items.hasOwnProperty(value);
	}
	
	//	向集合中添加value值，添加成功返回true
	this.add = function(value){
		if (!this.has(value)){
			items[this.size()] = value;
			return true;
		}
		return false;
	}
	
	//	在集合中移除value值，返回被移除的值
	this.remove = function(value){
		if (this.has(value)){
			return items.splice(items.indexOf(value),1);
			// return items.indexOf(value);
		}
		return null;
	}
	
	//	返回集合中的元素个数
	this.size = function(){
		return items.length;
	}
	
	//	清空集合
	this.clear = function(){
		items = [];
	}
	
	//	返回集合中的所有元素
	this.values = function(){
		return items.toString();
	}
	
	//	输出集合中的所有元素
	this.println = function(){
		console.log(this.values());
	}
	
	//	并集
	this.union = function(otherSet){
		var unionSet = new Set();
		var valueArr = this.values().split(',');
		for (var i=0; i<this.size(); i++){
			unionSet.add(valueArr[i]);
		}
		var valueArr = otherSet.values().split(',');
		for (var i=0; i<this.size(); i++){
			unionSet.add(valueArr[i]);
		}
		return unionSet;
	}
	
	//	交集
	this.intersection = function(otherSet){
		var intersectionSet = new Set();
		var valueArr = this.values().split(',');
		for (var i=0; i<this.size(); i++){
			if (otherSet.has(valueArr[i])){
				intersectionSet.add(valueArr[i]);
			}
		}
		return intersectionSet;
	}
	
	//	差集，返回存在于给定集合并不存在于另一个集合的新集合
	this.difference = function(otherSet){
		var differenceSet = new Set();
		var valueArr = this.values().split(',');
		for (var i=0; i<this.size(); i++){
			if (!otherSet.has(valueArr[i])){
				differenceSet.add(valueArr[i]);
			}
		}
		return differenceSet;
	}
	
	//	子集，验证给定集合是否是另一个集合的子集
	this.subset = function(otherSet){
		if (this.size()	> otherSet.size()){
			return false;
		}else {
			var valueArr = this.values().split(',');
			for (var i=0; i<this.size(); i++){
				if (!otherSet.has(valueArr[i])){
					return false;
				}
			}
			return true;
		}
	}
}
var setA = new Set();
setA.add('a');

var setB = new Set();
setB.add('a');
setB.add('1');
setB.add('2');

console.log(setA.subset(setB));

</script>
</head>
</html>